import request from "@/utils/request";
import type { UploadUserFile } from "element-plus";
import { Attachment, IObject } from "@/api/common/common";
import httpRequest from "@/utils/requestUtil";
import CommonUtil from "@/utils/commonUtil";

const GOODS_BASE_URL = "/goods/goods";

const GoodsAPI = {
  /**
   * 获取商品分页列表
   *
   * @param queryParams 查询参数
   */
  getPage(queryParams: GoodsPageQuery) {
    return request<any, PageResult<GoodsPageVO[]>>({
      url: `${GOODS_BASE_URL}/loadPage`,
      method: "get",
      params: queryParams,
    });
  },

  /**
   * 获取商品表单详情
   *
   * @param userId 商品ID
   * @returns 商品表单详情
   */
  getFormData(userId: string) {
    return request<any, SumbitGoodsView>({
      url: `${GOODS_BASE_URL}/loadDetail/${userId}`,
      method: "get",
    });
  },

  /**
   * 添加商品
   *
   * @param data 商品表单数据
   */
  createForm(data: SumbitGoodsForm) {
    const formData: FormData = CommonUtil.getFormData(data);
    // 修复ts编译错误：FormData不存在entries方法
    // @ts-ignore
    return httpRequest.postFormData<PageResult<GoodsForm[]>>(`${GOODS_BASE_URL}/addForm`, formData);
  },

  /**
   * 修改商品
   *
   * @param id 商品ID
   * @param data 商品表单数据
   */
  updateForm(id: string, data: SumbitGoodsForm) {
    const formData: FormData = CommonUtil.getFormData(data);
    // 修复ts编译错误：FormData不存在entries方法
    // @ts-ignore
    return httpRequest.postFormData<PageResult<GoodsForm[]>>(
      `${GOODS_BASE_URL}/updateForm`,
      formData
    );
  },

  /**
   * 添加商品
   *
   * @param data 商品表单数据
   */
  create(data: SumbitGoodsForm) {
    // 修复ts编译错误：FormData不存在entries方法
    // @ts-ignore
    return httpRequest.post<PageResult<GoodsPageVO>>(`${GOODS_BASE_URL}/add`, data);
  },

  /**
   * 修改商品
   *
   * @param data 商品表单数据
   */
  update(data: SumbitGoodsForm) {
    // 修复ts编译错误：FormData不存在entries方法
    // @ts-ignore
    return httpRequest.post<PageResult<GoodsPageVO>>(`${GOODS_BASE_URL}/update`, data);
  },

  /**
   * 批量删除商品，多个以英文逗号(,)分割
   *
   * @param ids 商品ID字符串，多个以英文逗号(,)分割
   */
  deleteByIds(ids: string) {
    return request({
      url: `${GOODS_BASE_URL}/batchDelete?ids=${ids}`,
      method: "get",
    });
  },

  /**
   *  获取商品下拉列表
   */
  getOptions() {
    return request<any, OptionType[]>({
      url: `${GOODS_BASE_URL}/options`,
      method: "get",
    });
  },

  /**
   * 修改商品
   *
   * @param id 商品ID
   * @param data 状态
   */
  updateMarket(ids: string, market: boolean) {
    const data = {
      ids,
      market,
    };
    return httpRequest.get<boolean>(`${GOODS_BASE_URL}/updateMarket`, data);
  },

  /**
   * 修改商品
   *
   * @param id 商品ID
   * @param data 状态
   */
  updateHot(ids: string, hot: boolean) {
    const data = {
      ids,
      hot,
    };
    return httpRequest.get<boolean>(`${GOODS_BASE_URL}/updateHot`, data);
  },
};

export default GoodsAPI;

/**
 * 商品分页查询对象
 */
export interface GoodsPageQuery extends PageQuery {
  /** 搜索关键字 */
  keywords?: string;

  /** 商品状态 */
  market?: boolean;

  /** 部门ID */
  categoryIds?: string;

  deepSearch?: boolean;
}

/** 商品分页对象 */
export interface GoodsPageVO {
  /** 商品ID */
  id?: string;
  /** 商品名称 */
  name?: string;
  /** 分类ID */
  categoryId?: string;
  /** 简介 */
  brief?: string;
  /** h5 */
  h5?: string;
  /** pc */
  pc?: string;
  /** 上架 */
  market?: boolean;
  /** 单位 */
  unit?: string;
  /** 品牌 */
  brand?: boolean;
  /** 厂家 */
  company?: string;
  code?: string;
  model?: string;
  hot?: boolean;
}

export interface SumbitGoodsForm {
  goods: GoodsForm;
  spus: GoodsSpu[];
  imageIds?: string[];
  attrs?: GoodsAttribute[];
  skus?: GoodsSku[];
}

export interface SumbitGoodsView {
  goods: GoodsForm;
  spus: GoodsSpu[];
  attachments?: Attachment[];
  attrs?: GoodsAttribute[];
  skus?: GoodsSku[];
}

/** 商品表单类型 */
export interface GoodsForm {
  /** 商品ID */
  id?: string;
  /** 商品名称 */
  name?: string;
  /** 分类ID */
  categoryId?: string;
  /** 简介 */
  brief?: string;
  /** h5 */
  h5?: string;
  /** pc */
  pc?: string;
  /** 上架 */
  market?: boolean;
  /** 单位 */
  unit?: string;
  /** 规格 */
  spec?: string;
  /** 品牌 */
  brand?: string;
  /** 厂家 */
  company?: string;
  code?: string;
  model?: string;
  relatedType?: GoodsRelatedType;
  relatedId?: string;
  relatedName?: string;
  discountPrice?: string | number;
  price?: string | number;
  imageId?: string;
}

/** 商品参数 */
export interface GoodsSpu {
  /** 商品ID */
  goodsId?: string;
  /** 参数名称 */
  property?: string;
  /** 参数值 */
  propertyValue?: string;
}

/** 商品参数 */
export interface GoodsSku {
  skuNo?: string;
  /** 商品ID */
  goodsId?: string;
  /** 价格 */
  price?: string;
  /** 所有参数id用，分隔 如： 1,2,3*/
  attrsIds?: string;
  /** 所有属性json:{"颜色":"红色","尺寸":"M"} */
  attrsContent: string;
}

export interface GoodsAttribute {
  id?: string;
  /** 商品ID */
  goodsId?: string;
  /** 属性名称 */
  name?: string;
  /** 属性值 */
  attrValues?: string;
}

export interface GoodsDetail {
  /** 商品ID */
  id?: string;
  /** 商品名称 */
  name?: string;
  /** 分类ID */
  categoryId?: string;
  /** 简介 */
  brief?: string;
  /** h5 */
  h5?: string;
  /** pc */
  pc?: string;
  /** 上架 */
  market?: boolean;
  /** 单位 */
  unit?: string;
  /** 品牌 */
  brand?: boolean;
  /** 厂家 */
  company?: string;
}

export enum GoodsRelatedType {
  SaleMeal = "SaleMeal",
  Material = "Material",
}

export const GoodsRelatedType_LABEL: IObject = {
  [GoodsRelatedType.SaleMeal]: "套餐",
  [GoodsRelatedType.Material]: "材料",
};
